{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Ch `08`: Concept `01`"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Reinforcement learning"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The **states** are previous history of stock prices, current budget, and current number of shares of a stock.\n",
    "\n",
    "The **actions** are buy, sell, or hold (i.e. do nothing).\n",
    "\n",
    "The stock market data comes from the Yahoo Finance library, `pip install yahoo-finance`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "from yahoo_finance import Share\n",
    "from matplotlib import pyplot as plt\n",
    "import numpy as np\n",
    "import random\n",
    "import tensorflow as tf\n",
    "import random"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Define an abstract class called `DecisionPolicy`:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class DecisionPolicy:\n",
    "    def select_action(self, current_state, step):\n",
    "        pass\n",
    "\n",
    "    def update_q(self, state, action, reward, next_state):\n",
    "        pass"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Here's one way we could implement the decision policy, called a random decision policy:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class RandomDecisionPolicy(DecisionPolicy):\n",
    "    def __init__(self, actions):\n",
    "        self.actions = actions\n",
    "\n",
    "    def select_action(self, current_state, step):\n",
    "        action = random.choice(self.actions)\n",
    "        return action"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "That's a good baseline. Now let's use a smarter approach using a neural network:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "class QLearningDecisionPolicy(DecisionPolicy):\n",
    "    def __init__(self, actions, input_dim):\n",
    "        self.epsilon = 0.95\n",
    "        self.gamma = 0.3\n",
    "        self.actions = actions\n",
    "        output_dim = len(actions)\n",
    "        h1_dim = 20\n",
    "\n",
    "        self.x = tf.placeholder(tf.float32, [None, input_dim])\n",
    "        self.y = tf.placeholder(tf.float32, [output_dim])\n",
    "        W1 = tf.Variable(tf.random_normal([input_dim, h1_dim]))\n",
    "        b1 = tf.Variable(tf.constant(0.1, shape=[h1_dim]))\n",
    "        h1 = tf.nn.relu(tf.matmul(self.x, W1) + b1)\n",
    "        W2 = tf.Variable(tf.random_normal([h1_dim, output_dim]))\n",
    "        b2 = tf.Variable(tf.constant(0.1, shape=[output_dim]))\n",
    "        self.q = tf.nn.relu(tf.matmul(h1, W2) + b2)\n",
    "\n",
    "        loss = tf.square(self.y - self.q)\n",
    "        self.train_op = tf.train.AdamOptimizer(0.001).minimize(loss)\n",
    "        self.sess = tf.Session()\n",
    "        self.sess.run(tf.global_variables_initializer())\n",
    "\n",
    "    def select_action(self, current_state, step):\n",
    "        threshold = min(self.epsilon, step / 1000.)\n",
    "        if random.random() < threshold:\n",
    "            # Exploit best option with probability epsilon\n",
    "            action_q_vals = self.sess.run(self.q, feed_dict={self.x: current_state})\n",
    "            action_idx = np.argmax(action_q_vals)  # TODO: replace w/ tensorflow's argmax\n",
    "            action = self.actions[action_idx]\n",
    "        else:\n",
    "            # Explore random option with probability 1 - epsilon\n",
    "            action = self.actions[random.randint(0, len(self.actions) - 1)]\n",
    "        return action\n",
    "\n",
    "    def update_q(self, state, action, reward, next_state):\n",
    "        action_q_vals = self.sess.run(self.q, feed_dict={self.x: state})\n",
    "        next_action_q_vals = self.sess.run(self.q, feed_dict={self.x: next_state})\n",
    "        next_action_idx = np.argmax(next_action_q_vals)\n",
    "        current_action_idx = self.actions.index(action)\n",
    "        action_q_vals[0, current_action_idx] = reward + self.gamma * next_action_q_vals[0, next_action_idx]\n",
    "        action_q_vals = np.squeeze(np.asarray(action_q_vals))\n",
    "        self.sess.run(self.train_op, feed_dict={self.x: state, self.y: action_q_vals})"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Define a function to run a simulation of buying and selling stocks from a market:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def run_simulation(policy, initial_budget, initial_num_stocks, prices, hist, debug=False):\n",
    "    budget = initial_budget\n",
    "    num_stocks = initial_num_stocks\n",
    "    share_value = 0\n",
    "    transitions = list()\n",
    "    for i in range(len(prices) - hist - 1):\n",
    "        if i % 1000 == 0:\n",
    "            print('progress {:.2f}%'.format(float(100*i) / (len(prices) - hist - 1)))\n",
    "        current_state = np.asmatrix(np.hstack((prices[i:i+hist], budget, num_stocks)))\n",
    "        current_portfolio = budget + num_stocks * share_value\n",
    "        action = policy.select_action(current_state, i)\n",
    "        share_value = float(prices[i + hist])\n",
    "        if action == 'Buy' and budget >= share_value:\n",
    "            budget -= share_value\n",
    "            num_stocks += 1\n",
    "        elif action == 'Sell' and num_stocks > 0:\n",
    "            budget += share_value\n",
    "            num_stocks -= 1\n",
    "        else:\n",
    "            action = 'Hold'\n",
    "        new_portfolio = budget + num_stocks * share_value\n",
    "        reward = new_portfolio - current_portfolio\n",
    "        next_state = np.asmatrix(np.hstack((prices[i+1:i+hist+1], budget, num_stocks)))\n",
    "        transitions.append((current_state, action, reward, next_state))\n",
    "        policy.update_q(current_state, action, reward, next_state)\n",
    "\n",
    "    portfolio = budget + num_stocks * share_value\n",
    "    if debug:\n",
    "        print('${}\\t{} shares'.format(budget, num_stocks))\n",
    "    return portfolio"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We want to run simulations multiple times and average out the performances:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def run_simulations(policy, budget, num_stocks, prices, hist):\n",
    "    num_tries = 5\n",
    "    final_portfolios = list()\n",
    "    for i in range(num_tries):\n",
    "        print('Running simulation {}...'.format(i + 1))\n",
    "        final_portfolio = run_simulation(policy, budget, num_stocks, prices, hist)\n",
    "        final_portfolios.append(final_portfolio)\n",
    "        print('Final portfolio: ${}'.format(final_portfolio))\n",
    "    plt.title('Final Portfolio Value')\n",
    "    plt.xlabel('Simulation #')\n",
    "    plt.ylabel('Net worth')\n",
    "    plt.plot(final_portfolios)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Call the following function to use the Yahoo Finance library and obtain useful stockmarket data. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def get_prices(share_symbol, start_date, end_date, cache_filename='stock_prices.npy'):\n",
    "    try:\n",
    "        stock_prices = np.load(cache_filename)\n",
    "    except IOError:\n",
    "        share = Share(share_symbol)\n",
    "        stock_hist = share.get_historical(start_date, end_date)\n",
    "        stock_prices = [stock_price['Open'] for stock_price in stock_hist]\n",
    "        np.save(cache_filename, stock_prices)\n",
    "\n",
    "    return stock_prices.astype(float)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Who wants to deal with stock market data without looking a pretty plots? No one. So we need this out of law:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "def plot_prices(prices):\n",
    "    plt.title('Opening stock prices')\n",
    "    plt.xlabel('day')\n",
    "    plt.ylabel('price ($)')\n",
    "    plt.plot(prices)\n",
    "    plt.savefig('prices.png')\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Train a reinforcement learning policy:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nv1GjAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f7070667400>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running simulation 1...\n",
      "progress 0.00%\n",
      "progress 16.55%\n",
      "progress 33.10%\n",
      "progress 49.64%\n",
      "progress 66.19%\n",
      "progress 82.74%\n",
      "progress 99.29%\n",
      "Final portfolio: $211337.9906860001\n",
      "Running simulation 2...\n",
      "progress 0.00%\n",
      "progress 16.55%\n",
      "progress 33.10%\n",
      "progress 49.64%\n",
      "progress 66.19%\n",
      "progress 82.74%\n",
      "progress 99.29%\n",
      "Final portfolio: $217982.47320000027\n",
      "Running simulation 3...\n",
      "progress 0.00%\n",
      "progress 16.55%\n",
      "progress 33.10%\n",
      "progress 49.64%\n",
      "progress 66.19%\n",
      "progress 82.74%\n",
      "progress 99.29%\n",
      "Final portfolio: $218393.6024270001\n",
      "Running simulation 4...\n",
      "progress 0.00%\n",
      "progress 16.55%\n",
      "progress 33.10%\n",
      "progress 49.64%\n",
      "progress 66.19%\n",
      "progress 82.74%\n",
      "progress 99.29%\n",
      "Final portfolio: $217917.51057200006\n",
      "Running simulation 5...\n",
      "progress 0.00%\n",
      "progress 16.55%\n",
      "progress 33.10%\n",
      "progress 49.64%\n",
      "progress 66.19%\n",
      "progress 82.74%\n",
      "progress 99.29%\n",
      "Final portfolio: $219461.85500000033\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nmXCW/wAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x7f70a9f4c5f8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "if __name__ == '__main__':\n",
    "    prices = get_prices('MSFT', '1992-07-22', '2016-07-22')\n",
    "    plot_prices(prices)\n",
    "    actions = ['Buy', 'Sell', 'Hold']\n",
    "    hist = 3\n",
    "    # policy = RandomDecisionPolicy(actions)\n",
    "    policy = QLearningDecisionPolicy(actions, hist + 2)\n",
    "    budget = 100000.0\n",
    "    num_stocks = 0\n",
    "    run_simulations(policy, budget, num_stocks, prices, hist)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.5.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
